import data.Pryl;
import data.Person;
import data.Vardesakerregister;
import data.pryl.Aktie;
import data.pryl.Apparat;
import data.pryl.Smycke;

import java.util.Scanner;

/**
 * User: Milica Bogdanovic
 * Date: 2013-01-12
 * Time: 07:31
 */
public class HuvudProgram {
    Vardesakerregister register = new Vardesakerregister();
    Scanner input = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.println("Hej och välkommen till Prylprogrammet");
        HuvudProgram hp = new HuvudProgram();
        hp.menu();
    }

    public void menu() {
        int val = 0;
        while (val != 7) {
            System.out.println("");
            System.out.println("--- Register över värdesaker ---");
            System.out.println("1) Skapa person");
            System.out.println("2) Skapa pryl");
            System.out.println("3) Visa alla");
            System.out.println("4) Visa rikaste");
            System.out.println("5) Visa viss person");
            System.out.println("6) Börskrasch");
            System.out.println("7) Avsluta");
            val = readInt("Ange kommando 1-7: ");
            switch (val) {
                case 1:
                    skapaPerson();
                    break;
                case 2:
                    skapaPryl();
                    break;
                case 3:
                    visaAlla();
                    break;
                case 4:
                    visaRikaste();
                    break;
                case 5:
                    visaViss();
                    break;
                case 6:
                    borskrasch();
                    break;
                case 7:
                    System.out.println("Tack och hej då!");
                    break;
                default:
                    System.out.println("Fel kommando");
                    break;
            }
        }
    }

    private int readInt(String fraga) {
        while (true) {
            try {
                System.out.print(fraga);
                return Integer.parseInt(input.nextLine());
            } catch (NumberFormatException e) {
                System.out.println("Fel - skall vara numeriskt värde");
            }
        }
    }

    private String readString(String fraga) {
        System.out.print(fraga);
        return input.nextLine();
    }


    private void skapaPerson() {
        String namn = readString("Nya personens namn: ");
        Person p = register.getPerson(namn);
        if (p != null) {
            System.out.println("Den personen finns redan");
        } else {
            Person ny = new Person(namn);
            register.addPerson(ny);
        }
    }

    private void skapaPryl() {
        String namn = readString("Vilken person äger prylen: ");
        Person person = register.getPerson(namn);
        if (person != null) {
            String sort = readString("Vilken sorts pryl (Smycke,Aktie,Apparat)? ");
            if ("smycke".equalsIgnoreCase(sort)) {
                String smyckesNamn = readString("Vilket sorts smycke: ");
                String guldsmycke = readString("är smycket av guld? (Ja/Nej)? ");
                boolean avGuld = ("ja".equalsIgnoreCase(guldsmycke));
                boolean avSilver = false;
                if (!avGuld) {
                    String silversmycke = readString("är smycket av silver (Ja/Nej)? ");
                    avSilver = ("ja".equalsIgnoreCase(silversmycke));
                }
                int antalAdelstenar = readInt("Antal ädelstenar: ");
                Smycke smycke = new Smycke(smyckesNamn, antalAdelstenar, avGuld, avSilver);
                person.laggTillPryl(smycke);
            } else if ("aktie".equalsIgnoreCase(sort)) {
                String aktieNamn = readString("Vilket sorts aktie: ");
                int aktieAntal = readInt("Antal aktier: ");
                int aktiePris = readInt("Pris per aktie: ");
                Aktie aktie = new Aktie(aktieNamn, aktieAntal, aktiePris);
                person.laggTillPryl(aktie);
            } else if ("apparat".equalsIgnoreCase(sort)) {
                String apparatNamn = readString("Vilket sorts apparat: ");
                int apparatPris = readInt("Apparatens pris: ");
                int apparatSlitage;
                do {
                    apparatSlitage = readInt("Apparatens slitage (1-10): ");
                } while (!(apparatSlitage >= 1 && apparatSlitage <= 10));
                Apparat apparat = new Apparat(apparatNamn, apparatPris, apparatSlitage);
                person.laggTillPryl(apparat);
            } else {
                System.out.println("Okänd pryltyp. Kan vara data.prylar.Smycke/data.prylar.Aktie/data.prylar.Apparat");
            }
        } else {
            System.out.println("Den personen finns inte i registret");
        }
    }

    private void visaAlla() {
        for (Person person : register.getPersoner()) {
            System.out.println(person.getNamn() + " " + person.getPrylvarde());
        }
    }

    private void visaRikaste() {
        Person person = register.getRikaste();
        if (person != null) {
            System.out.println("Rikast är " + person.getNamn() + " som sammanlagt äger " + person.getPrylvarde());
            for (Pryl pryl : person.getPrylar()) {
                System.out.println(" " + pryl.getNamn() + " " + pryl.getVarde());
            }
        }
    }

    private void visaViss() {
        String namn = readString("Vilken person: ");
        Person person = register.getPerson(namn);
        if (person != null) {
            System.out.println(person.getNamn() + " har följande prylar: ");
            int i = 1;
            for (Pryl pryl : person.getPrylar()) {
                System.out.println(i + ". " + pryl.getNamn() + " " + pryl.getVarde());
            }
        } else {
            System.out.println("Den personen finns inte i registret");
        }
    }

    private void borskrasch() {
        register.utforBorskrasch();
        System.out.println("Börskrasch har inträffat. Alla aktier har värdet 0.");
    }

}
